package com.hospital.workstation.config;

import cn.hutool.core.lang.Console;
import com.hospital.workstation.utils.RsaUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.security.*;
import java.security.cert.Certificate;
import java.security.spec.InvalidKeySpecException;
import java.util.Base64;
import java.util.Enumeration;

/**
 * @Author:HYZ
 * @Date:2023-3-16
 */
//@Component
//@Slf4j
//public class LicenseConfig implements ApplicationRunner {
//    private String cert = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJ6cyIwk/DrmsW4WSNGyvU9qVxan9K9FqHed6Gs/2C8xAQTs/4y3klB5u/tKgXbOIh2EnnaY67QlayKGb8mbwDMuFJhMT6GOajCuYUSdGBhNIOnc+7Zs9TZn7XLyRdFfjiZ+m+5/hNL2OlN+aGdNEaoJbM8trPJYYk+6FaUA1PTwIDAQAB";
//    @Value("${license.signData}")
//    private String signData;
//
//    @Override
//    public void run(ApplicationArguments args) throws Exception {
//        //if (!checkLicense()) {
//        Console.log("1");
//        if (!checkLicense()){
//            log.info("许可签名验证失败，系统退出运行！");
//            System.exit(0);
//        }
//    }
//
//    public boolean checkLicense() {
//        try {
//            PublicKey publicKey = RsaUtil.getPublicKey(cert);
//            String macId = getMacId();
//            log.info("MAC地址：" + macId);
//            Signature signature = Signature.getInstance("SHA256withRSA");
//            signature.initVerify(publicKey);
//            signature.update(macId.getBytes());
//            return signature.verify(Base64.getDecoder().decode(signData));
//        } catch (NoSuchAlgorithmException | InvalidKeySpecException | InvalidKeyException | SignatureException e) {
//            e.printStackTrace();
//        }
//        return false;
//    }
//
//    /**
//     * 此方法描述的是：获得服务器的MAC地址
//     */
//    public static String getMacId() {
//        String macId = "";
//        InetAddress ip = null;
//        NetworkInterface ni = null;
//        try {
//            boolean bFindIP = false;
//            Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface
//                .getNetworkInterfaces();
//            while (netInterfaces.hasMoreElements()) {
//                if (bFindIP) {
//                    break;
//                }
//                ni = (NetworkInterface) netInterfaces
//                    .nextElement();
//                // ----------特定情况，可以考虑用ni.getName判断
//                // 遍历所有ip
//                Enumeration<InetAddress> ips = ni.getInetAddresses();
//                while (ips.hasMoreElements()) {
//                    ip = (InetAddress) ips.nextElement();
//                    if (!ip.isLoopbackAddress() // 非127.0.0.1
//                        && ip.getHostAddress().matches(
//                        "(\\d{1,3}\\.){3}\\d{1,3}")) {
//                        bFindIP = true;
//                        break;
//                    }
//                }
//            }
//        } catch (Exception e) {
//            log.error(e.getMessage(), LicenseConfig.class);
//        }
//        if (null != ip) {
//            try {
//                macId = getMacFromBytes(ni.getHardwareAddress());
//            } catch (SocketException e) {
//                log.error(e.getMessage(), LicenseConfig.class);
//            }
//        }
//        log.warn("macId=" + macId);
//        return macId;
//    }
//
//    private static String getMacFromBytes(byte[] bytes) {
//        StringBuffer mac = new StringBuffer();
//        byte currentByte;
//        boolean first = false;
//        for (byte b : bytes) {
//            if (first) {
//                mac.append("-");
//            }
//            currentByte = (byte) ((b & 240) >> 4);
//            mac.append(Integer.toHexString(currentByte));
//            currentByte = (byte) (b & 15);
//            mac.append(Integer.toHexString(currentByte));
//            first = true;
//        }
//        return mac.toString().toUpperCase();
//    }


//}
